from apis.wework import WeWork
from utils.file_tools import FileTool


class Department(WeWork):
    def __init__(self):
        super().__init__()
        # 读取secrets文件
        yaml_data = FileTool.read_yaml("secrets")
        corpid = yaml_data.get('corpid').get('companyid')
        corpsecret = yaml_data.get('corpsecret').get('secret')
        self.token = self.get_token(corpid, corpsecret)

    # 创建部门
    def create_department(self, name, name_en=None, parentid=1, order=None, Id=None):
        '''
        :param name:必填，部门名称。同一个层级的部门名称不能重复。长度限制为1~32个字符，字符不能包括\:*?”<>｜
        :param name_en:非必填，英文名称。同一个层级的部门名称不能重复。需要在管理后台开启多语言支持才能生效。长度限制为1~32个字符，字符不能包括\:*?”<>｜
        :param parentid:必填，父部门id，32位整型
        :param order:非必填，在父部门中的次序值。order值大的排序靠前。有效的值范围是[0, 2^32)
        :param Id:非必填，部门id，32位整型，指定时必须大于1。若不填该参数，将自动生成id
        :return:{"errcode": 0,"errmsg": "created","id": 2}
        '''
        data = {
            "method": "POST",
            "url": f"https://qyapi.weixin.qq.com/cgi-bin/department/create?access_token={self.token}",
            "json": {
                "name": name,
                "name_en": name_en,
                "parentid": parentid,
                "order": order,
                "id": Id
            }
        }
        return self.send(**data)

    # 更新部门
    def update_department(self,Id, name=None, name_en=None, parentid=None,order=None):
        '''
        :param Id:必填，部门id
        :param name:非必填，部门名称。长度限制为1~32个字符，字符不能包括\:*?”<>｜
        :param name_en:非必填，英文名称，需要在管理后台开启多语言支持才能生效。长度限制为1~32个字符，字符不能包括\:*?”<>｜
        :param parentid:非必填，父部门id
        :param order:非必填，在父部门中的次序值。order值大的排序靠前。有效的值范围是[0, 2^32)
        :return:{"errcode": 0,"errmsg": "updated"}
        '''
        data = {
            "method": "POST",
            "url": f"https://qyapi.weixin.qq.com/cgi-bin/department/update?access_token={self.token}",
            "json": {
                "id": Id,
                "name": name,
                "name_en": name_en,
                "parentid": parentid,
                "order": order,
            }
        }
        return self.send(**data)

    # 删除部门
    def delete_department(self,Id):
        '''
        :param Id:必填，部门id。（注：不能删除根部门；不能删除含有子部门、成员的部门）
        :return:{"errcode": 0,"errmsg": "deleted"}
        '''
        data = {
            "method": "GET",
            "url": f"https://qyapi.weixin.qq.com/cgi-bin/department/delete?access_token={self.token}",
            "params": {
                "id": Id
            }
        }
        return self.send(**data)

    # 获取部门列表
    def get_department_list(self,Id):
        '''
        :param Id:必填，部门id。获取指定部门及其下的子部门（以及及子部门的子部门等等，递归）。 如果不填，默认获取全量组织架构
        :return:
        {"errcode": 0,"errmsg": "ok","department": [
       {
           "id": 2,
           "name": "广州研发中心",
           "name_en": "RDGZ",
           "parentid": 1,
           "order": 10
       },
       {
           "id": 3,
           "name": "邮箱产品部",
           "name_en": "mail",
           "parentid": 2,
           "order": 40
       }
   ]
}
        '''
        data = {
            "method": "GET",
            "url": f"https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token={self.token}",
            "params": {
                "id": Id
            }
        }
        return self.send(**data)